from django import template
from ..models import Post
from django.db.models import Count
from django.utils.safestring import mark_safe
# 导入下载安装的markdown模块
import markdown


register = template.Library()
# 将定义的函数total_posts注册为自定义标签
@register.simple_tag
def total_posts(): # 定义一个自定义标签total_posts
 # 返回当前发布文章的数量
    return Post.published.count()
    # 将show_latest_posts函数和blog/postlatests_posts.html注册为标签

@register.inclusion_tag('blog/post/latest_posts.html')
def show_latest_posts(count=5): # 默认获取最近发布的5篇文章
 # 获取最近发布的文章
   latest_posts = Post.published.order_by('-publish')[:count]
 # 将最近发布的文章传递至模板
   return {'latest_posts': latest_posts}
   # 使用simple_tag将get_most_commented_posts函数注册为自定义模版标签
   
@register.simple_tag
def get_most_commented_posts(count=5): # 默认显示5篇文章
 # 对已经发布的文章统计评论数量保存并按照评论数量分组后按评论数量从大大小排序取前count个，count是函数参数，可以修改
   return Post.published.annotate(total_comments=Count('comments')).order_by('-total_comments')[:count]
@register.filter(name='markdown')
def markdown_format(text): # 定义markdown_format函数，接收text作为参数
 # 使用markdown模块提供的markdown方法将markdown格式的文章
 # 转化为正常阅读形式的文章，再使用mark_safe函数将这个字符串
 # 标记为安全，可以输出显示
   return mark_safe(markdown.markdown(text))